﻿using System;
using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using SIBI.Models;
using System.Net.Mail;
using System.Data;
using System.IO;
using System.Net.Mime;

namespace SIBI.Controllers
{
    public class AccountController : Controller
    {

        private SIBIContext db = new SIBIContext();

		//***********************************************************************************//
        // Autor:  										     	                			*//
		//***********************************************************************************//
		// LogOn()																			*//
		// Acción Encargada de Iniciar la Sesión del Usuario. Método GET.					*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	ReturnUrl: dirección de re direccionamiento luego de ingresar en el inicio 	*//
		//		de sesión.																	*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la plantilla para ingresar al sistema.				*//
		// _________________________________________________________________________________*//
        public ActionResult LogOn(string ReturnUrl)
        {
            if (ReturnUrl != null)   {
                ViewBag.Mensaje = "NO tiene Permisos para acceder a esta Página";
                ViewBag.Error = string.Empty;
            }
            else {
                ViewBag.Mensaje = string.Empty;
            }
            return View();
        }

		//***********************************************************************************//
        // Autor:  										                       				*//
		//***********************************************************************************//
		// LogOn()																			*//
		// Acción Encargada de Iniciar la Sesión del Usuario. Método POST.					*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	model: modelo de tipo usuario del sistema requerido para verificar que los 	*//
		//		datos suministrados de usuario son correctos,  para así permitir o negar el *//
		//		inicio de sesión. 															*//
		// •	returnUrl: dirección de re direccionamiento luego de ingresar en el inicio 	*//
		//		de sesión.																	*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve el ingreso al sistema con advertencias si es 		*//
		// necesario.																		*//
		// _________________________________________________________________________________*//
        [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            var bodySendCorreo = ""; 
           
            var subjectSend = "";
            
            if (ModelState.IsValid)
            {
                if (Membership.ValidateUser(model.UserName, model.Password))
                {
					//Extracción del numeo de dias antes a verificar las fechas
                    var diasList = (from m in db.ControlCorreos
                                    where m.ControlCorreoId == 3
                                    select m.nfre).ToList();
                    var dias = (Double)diasList.FirstOrDefault();

 
                    //***********************************************************************************//
                    //****                        INICIO  PROYECTO SIBI V.1.0                         ***//
                    //****                             Adrian Di Puglia                               ***//
                    //***********************************************************************************//


                    //*************** Notificación de Bajas/Actualizacion de Cargos *********************\\

					//Creación de los Datos del correo//
                    var tabla = "<table border =1>"+
                                        "<tr border=1 bgcolor='##58ACFA'color='#FFFFFF'>" +
                                            "<th><b><font color='#FFFFFF'> Nombre </font></b></th>" +
                                            "<th><b><font color='#FFFFFF'> Cargo Anterior </font></b></th>" +
                                            "<th><b><font color='#FFFFFF'> Cargo Nuevo </font></b></th>" +
                                            "<th><b><font color='#FFFFFF'> Localidad </font></b></th>" +
                                            "<th><b><font color='#FFFFFF'> Fecha de Baja/Act </font></b></th>" +
                                            "<th><b><font color='#FFFFFF'> Serial BI </font></b></th>" +
                                            "<th><b><font color='#FFFFFF'>  Baja/Act </font></b></th>" + 
                                         "</tr>";
                    subjectSend = "Bajas y Transferencias de Empleados Gruma Venezuela";
					
					//Busqueda de cargo de baja
                    var bjsCargos = (from m in db.CargoBajas
                                     where m.cflg == false
                                     select new { m.cnom, m.cdes, m.cdesNew, m.cloc, m.dbaj, m.cbac, /*Selcción del Cuerpo del Correo*/
                                                  m.CargoBajaId, m.idCargo, m.idCargoNew }).ToList(); /*Selcción para busqueda de datos del Correo*/
					
					//Busqueda de los BI para cada cargo de baja
                    foreach (var carBj in bjsCargos)
                    {
                        var bajaAct = "A";

                        if (carBj.cbac == false)
                        {
                            bajaAct = "B";
                        }

                        var seriales = (from m in db.BienInformaticoes
                                        where m.CargoId == carBj.idCargo
                                        select m.BienInformaticoId).ToList();
                        if (seriales.Count() != 0)
                        {
                            foreach (var ser in seriales)
                            {
                                tabla += "<tr>" +
                                            "<td>" + carBj.cnom + "</td>" +
                                            "<td>" + carBj.cdes + "</td>" +
                                            "<td>" + carBj.cdesNew + "</td>" +
                                            "<td>" + carBj.cloc + "</td>" +
                                            "<td>" + carBj.dbaj.ToShortDateString() + "</td>" +
                                            "<td>" + ser + "</td>" +
                                            "<td>" + bajaAct + "</td>" +
                                         "</tr>";
                            }
                        }
                        else
                        {
                            tabla += "<tr>" +
                                        "<td>" + carBj.cnom + "</td>" +
                                        "<td>" + carBj.cdes + "</td>" +
                                        "<td>" + carBj.cdesNew + "</td>" +
                                        "<td>" + carBj.cloc + "</td>" +
                                        "<td>" + carBj.dbaj.ToShortDateString() + "</td>" +
                                        "<td>" + "<b>NO POSEE</b>" + "</td>" +
                                        "<td>" + bajaAct + "</td>" +
                                     "</tr>";
                        }
                    }
                    tabla += "</table>";

                    bodySendCorreo = "<b>Empleados que han cambiado de Cargo o ya no pertenecen a la empresa</b> <br /> <br />" + tabla;

                    var envio = true;

					//Busqueda de los correos destinatorios
                    MembershipUser currentUser = Membership.GetUser(model.UserName);
                    var to = currentUser.Email;

                    if(bjsCargos.Count()!= 0){
                        try
                        {
							//Envio de correo
                            sendEmail(to, subjectSend, bodySendCorreo, true);
                        }
                        catch (Exception)
                        {
                            envio = false;
                        }
                    }
					
					//Marcación de envío de correo para las bajas de personal del día
                    if (envio)
                    {
                        foreach (var carBj in bjsCargos)
                        {
                            CargoBajas cargoModf = db.CargoBajas.Find(carBj.CargoBajaId);

                            cargoModf.cflg = true;

                            db.Entry(cargoModf).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                    }
                    //*********************** FIN Notificación de Bajas de Cargos ***********************\\

                    //***********************************************************************************//
                    //****                          FIN  PROYECTO SIBI V.1.0                          ***//
                    //***********************************************************************************//

        //*********************************** Recordatorio de Equipos en Mantenimiento en Centro de Soporte *************************************\\

                    var undiaMsn   = string.Empty;
                    var dosdiaMsn  = string.Empty;
                    var tresdiaMsn = string.Empty;
                    var mensaje    = string.Empty;
					
					//Busqueda de proveedor de mantenimiento Centro de Soporte
                    var manCentro = (from m in db.Mantenimientoes
                                     where m.dffm == null
                                     select m.BienInformaticoId).ToList();
									 
					//Inicialicación de días de tiempo en mantenimineto
                    var unDia = DateTime.Now.Date.AddDays(-dias);
                    var dosDia = DateTime.Now.Date.AddDays(-dias * 2);
                    var tresDia = DateTime.Now.Date.AddDays(-dias * 3);
					
                    //Busqueda de los correos destinatorios
                    var cc = (from m in db.ControlCorreos
                              where m.CausaMovimientoId == 3 /* 3 = Mantenimiento */
                              select m.ccor).FirstOrDefault();

					//Para cada BI en Mantenimiento en Centro Soporte, verificar tiempo de estadía en este estado
                    foreach (var biIdAux in manCentro)
                    {
                        var manFecha = (from m in db.Mantenimientoes
                                        join p in db.Proveedors on m.ProveedorId equals p.ProveedorId
                                        where m.BienInformaticoId == biIdAux && m.dffm == null
                                        select m).FirstOrDefault();

                        if (manFecha == null) continue;

						//Verificaición de X días del mantenimiento en Centro de Soporte
                        if (manFecha.dfim == unDia)
                        {
                            var serial = (from m in db.BienInformaticoes
                                          join mm in db.MarcaModeloes on m.MarcaModeloId equals mm.MarcaModeloId
                                          join ma in db.Marcas on m.nmym.MarcaId equals ma.MarcaId
                                          join cl in db.ClaseObjetoes on m.nmym.ncob.ClaseObjetoId equals cl.ClaseObjetoId
                                          where m.BienInformaticoId == biIdAux
                                          select m).FirstOrDefault();

                            //undiaMsn = undiaMsn +", "+serial;
                            undiaMsn +=
                               "<tr> " +
                                   "<td> " + serial.BienInformaticoId + "</td>" +
                                   "<td> " + serial.nmym.nmar.cnom + "</td>" +
                                   "<td> " + serial.nmym.cmod + "</td>" +
                                   "<td> " + serial.nmym.ncob.cnom + "</td>" +
                                   "<td> " + manFecha.npro.cnom + "</td>" +
                                   "<td> 7 </td>" +
                                "</tr>";

                        }
						//Verificaición de X * 2 días del mantenimiento en Centro de Soporte
                        if (manFecha.dfim == dosDia)
                        {
                            var serial = (from m in db.BienInformaticoes
                                          where m.BienInformaticoId == biIdAux
                                          select m).FirstOrDefault();
                            //dosdiaMsn = dosdiaMsn + ", " + serial;
                            dosdiaMsn +=
                               "<tr> " +
                                   "<td> " + serial.BienInformaticoId + "</td>" +
                                   "<td> " + serial.nmym.nmar.cnom + "</td>" +
                                   "<td> " + serial.nmym.cmod + "</td>" +
                                   "<td> " + serial.nmym.ncob.cnom + "</td>" +
                                   "<td> " + manFecha.npro.cnom + "</td>" +
                                   "<td> 14 </td>" +
                                "</tr>";

                        }
						//Verificaición de X * 3 días del mantenimiento en Centro de Soporte
                        if (manFecha.dfim == tresDia)
                        {
                            var serial = (from m in db.BienInformaticoes
                                          where m.BienInformaticoId == biIdAux
                                          select m).FirstOrDefault();
                            //tresdiaMsn = tresdiaMsn + ", " + serial;
                            tresdiaMsn +=
                               "<tr> " +
                                   "<td> " + serial.BienInformaticoId + "</td>" +
                                   "<td> " + serial.nmym.nmar.cnom + "</td>" +
                                   "<td> " + serial.nmym.cmod + "</td>" +
                                   "<td> " + serial.nmym.ncob.cnom + "</td>" +
                                   "<td> " + manFecha.npro.cnom + "</td>" +
                                   "<td> 21 </td>" +
                                "</tr>";
                        }
                    }

                    var msg_base = " el mantenimiento de los siguientes equipos: <br /> <br /> " +
                                   "<table border='1'> "+
                                       "<tr> " +
                                          "<td> Serial </td>"+
                                          "<td> Marca </td>"+
                                          "<td> Modelo </td>"+
                                          "<td> Clase de Objeto </td>"+
                                          "<td> Proveedor </td>"+
                                          "<td> Días en Mantenimiento </td>"+
                                        "</tr> ";

                    // Enviando el correo
                    if (undiaMsn != String.Empty || dosdiaMsn != String.Empty || tresdiaMsn != String.Empty)
                    {
                        mensaje = msg_base + undiaMsn + dosdiaMsn + tresdiaMsn + "</table> <br /> " +
                                       "<br /><br />Se notificará por esta misma vía cuando se encuentren operativos. <br /><br />Saludos.";

                        sendEmail(cc, "Coordinación de Bienes Informáticos", mensaje, true);
                    }
                    

        //*********************************** FIN Recordatorio de Equipos en Mantenimiento en Centro de Soporte *************************************\\


       //*********************************** Recordatorio de GARANTÍAS y ANEXOS *************************************\\

                    ViewBag.Error = string.Empty;
					
					//Creación de los Datos del correo        
                    bodySendCorreo = "Control de fin de Garantías y Anexos <br />";
                    var bodySendCorreoOld = "Control de Garantías y Anexos Vencidos <br />";

                    var bodySend = "Control de fin de Garantías y Anexos.";
                    var SerialesAct = ""; // ocurrira el Vencimiento de la Garantía de los siguientes equipos, Seriales";
                    var SerialesArren = "";// ocurrira el Vencimiento de los Anexos de los siguientes equipos, Seriales";
                    var SerialesArren1 = "Seriales ";
                    var SerialesAct1 = "Seriales";
                    var SerialesArrenOld = "";

                    var Flag1 = 0;
                    var Flag2 = 0;
                    var Flag3 = 0;
                    var Flag4 = 0;

                    //Verifica las fechas de Vencimiento 30 días antes y el dìa del vencimiento
                    var FechaActMes = DateTime.Now.Date.AddDays(30);
                    var FechaAct = DateTime.Now.Date; 

					//Verificar BI que tiene su fecha de vencimiento en 30 días
                    var checkDate7 = (from m in db.BienInformaticoes
                                     where m.dfga == FechaActMes
                                     select m).ToList();
					//Verificar BI que tiene su fecha de vencimiento el mismo día
                    var checkDate = (from m in db.BienInformaticoes
                                     where m.dfga == FechaAct
                                     select m).ToList();
					//Verificar BI que tiene su fecha de vencimiento caducada
                    var checkOldDate = (from m in db.BienInformaticoes
                                        where m.dfga < FechaAct && m.EstadoId != 5 && m.TipoBienId == 1
                                        select m.nanf).Distinct().ToList();

                    if (checkDate7.Count() != 0 || checkDate.Count() != 0 || checkOldDate.Count() != 0 )
                    {
                        if (checkDate7.Count() != 0)
                        {
                            SerialesAct += "En 30 días ocurrirá el Vencimiento de la Garantía de los siguientes equipos, Seriales";
                            SerialesArren += "En 30 días ocurrirá el Vencimiento de los Anexos  " + checkDate7.FirstOrDefault().nanf + " de los siguientes equipos, Seriales";

                            foreach (var biAux in checkDate7)
                            {
                                if (biAux.TipoBienId == 1)
                                {
                                    Flag1 = 1;
                                    SerialesArren = SerialesArren + ", " + biAux.BienInformaticoId;/*Seriales Arrendados*/
                                }
                                else
                                {
                                    Flag2 = 1;
                                    SerialesAct = SerialesAct + ", " + biAux.BienInformaticoId;/*Seriales Activos*/
                                }
                            }
                            SerialesAct += ".";
                            SerialesArren += ".";
                            if (Flag1 == 0){
                                SerialesArren = "";}

                            if (Flag2 == 0){
                                SerialesAct = "";}
                        }
                        
                        if (checkDate.Count() != 0) 
                        {
                            foreach (var biAux in checkDate)
                            {
                                if (biAux.TipoBienId == 1)
                                {
                                    Flag3 = 1;
                                    SerialesArren1 = SerialesArren1 + ", " + biAux.BienInformaticoId;/*Seriales Arrendados*/
                                }
                                else
                                {
                                    Flag4 = 1;
                                    SerialesAct1 = SerialesAct1 + ", " + biAux.BienInformaticoId;/*Seriales Activos*/
                                }
                            }

                            if (Flag3 != 0){
                                SerialesArren += " HOY ocurre el Vencimiento de los Anexos  " + checkDate.FirstOrDefault().nanf + " de los siguientes equipos, " + SerialesArren1;
                            }

                            if (Flag4 != 0){
                                SerialesAct += " HOY ocurre el Vencimiento de la Garantía de los siguientes equipos, " + SerialesAct1;}

                        }

                        if (Flag3 == 0 && Flag1 == 0){
                            SerialesArren = "";}

                        if (Flag4 == 0 && Flag2 == 0){
                            SerialesAct = "";}

                        bodySend = bodySend + SerialesAct + ". " + SerialesArren + ". ";

                        if (checkOldDate.Count() != 0)
                        {
                            SerialesArrenOld = "Se venció el Anexo ";
                            var i = 1;

                            foreach (var biAux in checkOldDate)
                            {
                                if (i != checkOldDate.Count())
                                    SerialesArrenOld += biAux + ", "; //Seriales Arrendados
                                else
                                    SerialesArrenOld += biAux; 
                                i++;
                            }
                            
                            SerialesArrenOld += ".";
                        }

                        //--------------------------------  Envio de Correo  ------------------------------\\
						
						//Creación de los Datos del correo
                        bodySendCorreo = bodySendCorreo + "<br />" + SerialesAct + ".<br /><br /> " + SerialesArren + ".<br />";
                        bodySendCorreoOld = "<br /><br />" + SerialesArrenOld + ". <br />";

                        subjectSend = "Coordinación de Bienes Informáticos. Recordatorio de Garantías y Anexos";

						//Busqueda de los correos destinatorios
                        MembershipUser currentUser1 = Membership.GetUser(model.UserName);
                        var to1 = currentUser1.Email;

                        if (SerialesAct != string.Empty || SerialesArren != string.Empty)
                        {
                            try
                            {
								//Envio de correo
                                sendEmail(to1, subjectSend, bodySendCorreo, true);
                            }
                            catch (Exception)
                            {
                               //msnCorreo = "No se pudo enviar el correo debido a problemas con el servidor";
                            }
                            //--------------------------------  FIN Envio de Correo  ------------------------------\\
                        }

                    }
                    else 
                    {
                       SerialesAct = string.Empty;
                       SerialesArren = string.Empty;
                       SerialesArrenOld = string.Empty;
                    }

            //*********************************** FIN Recordatorio de GARANTÍAS y ANEXOS *************************************\\      

                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home", new { SerialesAct = SerialesAct, SerialesArren = SerialesArren, SerialesArrenOld = SerialesArrenOld });
                    }
                }
                else
                {
                    ViewBag.Error = "Fallo";
                    ModelState.AddModelError("", "El usuario o clave proporcinados son incorrectos.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
		
		//***********************************************************************************//
        // Autor:  									                	     				*//
		//***********************************************************************************//
		// LogOff()																			*//
		// Acción Encargada de terminar la Sesión del Usuario. Método GET.					*//
		// _________________________________________________________________________________*//
		// Entrada:	none																	*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la salida del sistema.								*//
		// _________________________________________________________________________________*//
        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();

            return RedirectToAction("Index", "Home");
        }

		//***********************************************************************************//
        // Autor: ASP Membership 										     				*//
		//***********************************************************************************//
		// Register()																		*//
		// Acción Encargada de resgistrar un nuevo Usuario. Método GET.						*//
		// _________________________________________________________________________________*//
		// Entrada:	none																	*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la plantilla de registro del sistema.				*//
		// _________________________________________________________________________________*//
        public ActionResult Register()
        {
            return View();
        }

		//***********************************************************************************//
        // Autor: ASP Membership 										     				*//
		//***********************************************************************************//
		// Register()																		*//
		// Acción Encargada de resgistrar un nuevo Usuario. Método POST.					*//
		// _________________________________________________________________________________*//
		// Entrada:	none																	*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve el registro del sistema.								*//
		// _________________________________________________________________________________*//
        [HttpPost]
        public ActionResult Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

		//***********************************************************************************//
        // Autor: ASP Membership 										     				*//
		//***********************************************************************************//
		// ChangePassword()																	*//
		// Acción Encargada de cambiar la contraseña de un Usuario. Método GET.				*//
		// _________________________________________________________________________________*//
		// Entrada:	none																	*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la plantilla de cambio de contraseña	 del sistema.	*//
		// _________________________________________________________________________________*//
        [Authorize]
        public ActionResult ChangePassword()
        {
            return View();
        }

		//***********************************************************************************//
        // Autor: ASP Membership 										     				*//
		//***********************************************************************************//
		// ChangePassword()																	*//
		// Acción Encargada de cambiar la contraseña de un Usuario. Método POST.			*//
		// _________________________________________________________________________________*//
		// Entrada:																			*//
		// •	model: modelo de tipo contraseña requerida para verificar que los datos 	*//
		//		suministrados de usuario son correctos, para así permitir o negar el cambio *//
		//		de contraseña. 																*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve el cambio de contraseña del sistema.					*//
		// _________________________________________________________________________________*//
        [Authorize]
        [HttpPost]
        public ActionResult ChangePassword(ChangePasswordModel model)
        {
            if (ModelState.IsValid)
            {
                // ChangePassword will throw an exception rather
                // than return false in certain failure scenarios.
                bool changePasswordSucceeded;
                try
                {
                    MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
                    changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword);
                }
                catch (Exception)
                {
                    changePasswordSucceeded = false;
                }

                if (changePasswordSucceeded)
                {
                    return RedirectToAction("ChangePasswordSuccess");
                }
                else
                {
                    ModelState.AddModelError("", "La contraseña es incorrecta o la nueva contraseña es invalida.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

		//***********************************************************************************//
        // Autor: ASP Membership 										     				*//
		//***********************************************************************************//
		// ChangePasswordSuccess()															*//
		// Acción Encargada de cambiar la contraseña de un Usuario. Método GET.				*//
		// _________________________________________________________________________________*//
		// Entrada:	none																	*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la plantilla de cambio de contraseña	 del sistema.	*//
		// _________________________________________________________________________________*//
        [Authorize]
        public ActionResult ChangePasswordSuccess()
        {
            return View();
        }

		//***********************************************************************************//
        // Autor: 										                     				*//
		//***********************************************************************************//
		// RecuperarPassword()																*//
		// Acción Encargada de recuperar la contraseña de un Usuario. Método GET.			*//
		// _________________________________________________________________________________*//
		// Entrada:	none																	*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la plantilla de recuperación de contraseña	 del 	*//
		// sistema.																			*//
		// _________________________________________________________________________________*//
        public ActionResult RecuperarPassword()
        {
            return View();
        }

		//***********************************************************************************//
        // Autor: 								                		     				*//
		//***********************************************************************************//
		// RecuperarPassword()																*//
		// Acción Encargada de recuperar la contraseña de un Usuario. Método POST.			*//
		// _________________________________________________________________________________*//
		// Entrada:																			*//
		// •	model: modelo de tipo usuario del sistema requerido para verificar que los 	*//
		//		datos suministrados de usuario son correctos,  para así permitir o negar la *//
		//		recuperación de contrseña. 													*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la recuperación de contraseña del sistema.			*//																		*//
		// _________________________________________________________________________________*//
        [HttpPost]
        public ActionResult RecuperarPassword(LogOnModel model)
        {
			//Se obtiene el ID del usuario deseado
            MembershipUser currentUser = Membership.GetUser(model.UserName);
            
            if (currentUser != null)
            {
				//Si el usuario existe se resetea su password
                currentUser.ResetPassword();
                string newPassword = currentUser.GetPassword();
				
                 //--------------------------------  Envio de Correo  ------------------------------\\
				 
				 //Creación de los Datos del correo con la nueva Password generada
                 var bodySendCorreo = "el cambio de contraseña. La nueva contraseña es: " + newPassword ;
                 var subjectSend = "SIBI Cambio de Contraseña";

                try
                {
					//Envio de correo
                    sendEmail(currentUser.Email, subjectSend, bodySendCorreo, true);
                 }
                 catch (Exception)
                 {
                     //msnCorreo = "No se pudo enviar el correo debido a problemas con el servidor";
                 }
                //--------------------------------  FIN Envio de Correo  ------------------------------\\

                var msn = "Se envió la nueva contraseña al correo, con ésta podrá ingresar al sistema, para luego realizar el cambio de contraseña deseada.";
                return RedirectToAction("Index", "Home", new { msn = msn }); 
            }
            else 
            {
                ViewBag.Error = "El Usuario no Existe";
            }

            return View(model);
        }
		
		//***********************************************************************************//
        // Autor:  										                     				*//
		//***********************************************************************************//
		// sendEmail()																		*//
		// Función que se encarga de enviar los correos del sistema							*//														 			
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	cc: Lista de correso separados por , a los cuales se desea enviar el mensaje*//
		// •	subject: subject que se va a enviar con el correo							*//	
		// •	body: cuerpo que se va a enviar con el correo								*//	
		// •	isBodyHtml: cboleano que dice si el cuerpo del correo es en formatao HTML	*//		
		// _________________________________________________________________________________*//
		// Salida:  Devuelve el envio de correo.											*//
		// _________________________________________________________________________________*//
        public void sendEmail(string cc, string subject, string body, bool isBodyHtml)
        {
			//Creación de la estructura del correo a enviar
            //var mailMessage = new System.Net.Mail.MailMessage();

            //mailMessage.To.Add(cc);
            //mailMessage.IsBodyHtml = isBodyHtml;
            //mailMessage.Subject = subject;
            //mailMessage.Body = body;
            //mailMessage.From = new MailAddress("admin_sibi@monaca.com.ve");

            //var smtpClient = new SmtpClient();



            //Creación del objeto para enviar correo electronicos
            var mailMessage = new System.Net.Mail.MailMessage();

            string header = "Buen día, <br /><br />La Coordinación de Bienes Informáticos informa ";
            //Colocando el destinatario del correo
            mailMessage.To.Add(cc);
            //Estableciendo que el cuerpo del correo es en el formato Html
            mailMessage.IsBodyHtml = isBodyHtml;
            //Título del correo
            mailMessage.Subject = subject;
            //Mensaje del correo
            //Colocando el remitente del correo
            mailMessage.From = new MailAddress("admin_sibi@monaca.com.ve");

            // --------------------- op 1 -------------- //
            string footer = "<br /><br /><div style=\"font-size:14px\" >Este mensaje fue enviado automáticamente por el sistema SIBI. <br /><hr /><br />" +
                          "<table style=\"font-size:14px\" border=\"0\">" +
                            "<tr>" +
                            "<td>Johanna Medina</td>" +
                            "<td>Beatriz Olmedillo</td>" +
                            "</tr>" +
                            "<tr>" +
                            "<td>Administrador de Bienes Informáticos &nbsp; </td>" +
                            "<td>Coordinación de Bienes Informáticos</td>" +
                            "</tr>" +
                            "<tr>" +
                            "<td>+58 (212)2079385</td>" +
                            "<td>+58(212)2079269</td>" +
                            "</tr>" +
                            "<tr>" +
                            "<td>jmmedina@monaca.com.ve</td>" +
                            "<td>bolmedillo@monaca.com.ve</td>" +
                            "</tr>" +
                          "</table><br /></div>" +
                          "<img src=\"@@IMAGE@@\" alt=\"\">";


            //string attachmentPath =  @"\comprometidosconmonaca.png";
            string path = Server.MapPath(@"..\Content\images\comprometidosconmonaca.png");

            //generate the contentID string using the datetime
            string contentID = Path.GetFileName(path).Replace(".", "") + "@zofm";

            //create the INLINE attachment<
            Attachment inline = new Attachment(path);
            inline.ContentDisposition.Inline = true;
            inline.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
            inline.ContentId = contentID;
            inline.ContentType.MediaType = "image/png";
            inline.ContentType.Name = Path.GetFileName(path);
            mailMessage.Attachments.Add(inline);

            // replace the tag with the correct content ID
            footer = footer.Replace("@@IMAGE@@", "cid:" + contentID);
            mailMessage.Body = header + body + footer;

            //Envio del correo.
            SmtpClient mailSender = new SmtpClient(); //use this if you are in the development server
            mailSender.Send(mailMessage);
        }

        #region Status Codes
        private static string ErrorCodeToString(MembershipCreateStatus createStatus)
        {
            // See http://go.microsoft.com/fwlink/?LinkID=177550 for
            // a full list of status codes.
            switch (createStatus)
            {
                case MembershipCreateStatus.DuplicateUserName:
                    return "El usuario ya existe. Por favor coloque un nombre de usuario diferente.";

                case MembershipCreateStatus.DuplicateEmail:
                    return "El correo ya existe. Por favor coloque un correo diferente.";

                case MembershipCreateStatus.InvalidPassword:
                    return "La contraseña proporcionada es inválida. Por favor ingrese un valor válido.";

                case MembershipCreateStatus.InvalidEmail:
                    return "El correo proporcionado es inválido. Por favor verifique el valor e intente de nuevo.";

                case MembershipCreateStatus.InvalidAnswer:
                    return "La respuesta de recuperación de contraseña es inválida. Por favor verifique el valor e intente de nuevo.";

                case MembershipCreateStatus.InvalidQuestion:
                    return "La pregunta de recuperación de contraseña es inválida. Por favor verifique el valor e intente de nuevo.";

                case MembershipCreateStatus.InvalidUserName:
                    return "El usuario proporcionado es inválido. Por favor verifique el valor e intente de nuevo.";

                case MembershipCreateStatus.ProviderError:
                    return "El proveedor de autentificación consiguió un error. Por favor verifique su entrada e intente de nuevo. Si el problema persiste contacte al administrador del sistema.";

                case MembershipCreateStatus.UserRejected:
                    return "La creación de usuario fue cancelada. Por favor verifique su entrada e intente de nuevo. Si el problema persiste contacte al administrador del sistema.";

                default:
                    return "Ocurrió un error desconocido. Por favor verifique su entrada e intente de nuevo. Si el problema persiste contacte al administrador del sistema.";            
            }
        }
        #endregion
    }
}
